#include"MVCgamemode.h"

void Gamemodel::Startgame(Gametype type)
{
    gametype=type;

    //初始棋盘
    gameMapVec.clear();
    for(int i=0;i<BOARD_GRAD_SIZE;i++)//循环十五次
    {
        std::vector<int>lineBoard;
        for(int j=0;j<BOARD_GRAD_SIZE;j++)
            lineBoard.push_back(0);
        gameMapVec.push_back(lineBoard);
    }

    //如果是AI模式，需要初始化评分数组
   if(gametype==AI)
   {
       scoreMapVec.clear();//clear 初始化 释放内存
       for(int i=0;i<BOARD_GRAD_SIZE;i++)//棋盘上的点原始分全设为零
       {
           std::vector<int>lineScores;
           for(int j=0;j<BOARD_GRAD_SIZE;j++)
                lineScores.push_back(0);
           scoreMapVec.push_back(lineScores);
       }

   }
   //轮到黑方下棋时为true，白方为false
   playerflag=true;
}

void Gamemodel::byman(int row, int col)
{
    updateGameMap(row,col);
}

void Gamemodel::updateGameMap(int row, int col)
{
    if(playerflag)
        gameMapVec[row][col]=1;
    else
         gameMapVec[row][col]=-1;

    //换手
    playerflag=!playerflag;
}

bool Gamemodel::IsWin(int row, int col)
{
    //水平方向是否赢棋
    for(int i=0;i<5;i++)
    {
        if(col-i>0&&
           col-i+4<BOARD_GRAD_SIZE&&
           gameMapVec[row][col-i]==gameMapVec[row][col-i+1]&&
           gameMapVec[row][col-i]==gameMapVec[row][col-i+2]&&
           gameMapVec[row][col-i]==gameMapVec[row][col-i+3]&&
           gameMapVec[row][col-i]==gameMapVec[row][col-i+4])
            return true;
    }

    //竖直方向是否赢棋
    for(int i=0;i<5;i++)
    {
        if(row-i>0&&
           row-i+4<BOARD_GRAD_SIZE&&
           gameMapVec[row-i][col]==gameMapVec[row-i+1][col]&&
           gameMapVec[row-i][col]==gameMapVec[row-i+2][col]&&
           gameMapVec[row-i][col]==gameMapVec[row-i+3][col]&&
           gameMapVec[row-i][col]==gameMapVec[row-i+4][col])
            return true;
    }

    //"/"方向
    for(int i=0;i<5;i++)
    {
        if(row+i-4>0&&
           row+i<BOARD_GRAD_SIZE&&
           col-i>0&&
           col-i+4<BOARD_GRAD_SIZE&&
           gameMapVec[row+i][col-i]==gameMapVec[row+i-1][col-i+1]&&
           gameMapVec[row+i][col-i]==gameMapVec[row+i-2][col-i+2]&&
           gameMapVec[row+i][col-i]==gameMapVec[row+i-3][col-i+3]&&
           gameMapVec[row+i][col-i]==gameMapVec[row+i-4][col-i+4])
            return true;
    }

    //"\"方向
    for(int i=0;i<5;i++)
    {
        if(row-i>0&&
           row-i+4<BOARD_GRAD_SIZE&&
           col-i>0&&
           col-i+4<BOARD_GRAD_SIZE&&
           gameMapVec[row-i][col-i]==gameMapVec[row-i+1][col-i+1]&&
           gameMapVec[row-i][col-i]==gameMapVec[row-i+2][col-i+2]&&
           gameMapVec[row-i][col-i]==gameMapVec[row-i+3][col-i+3]&&
           gameMapVec[row-i][col-i]==gameMapVec[row-i+4][col-i+4])
            return true;
    }

    return false;

}
